package com.briup.day19;

public class ThreadTest2 {
    public static void main(String[] args) throws InterruptedException {
        // 创建两个线程，两个线程分别输入10以内的奇数和偶数
        Thread t = new Thread(() -> {
            String name = Thread.currentThread().getName();
            for (int i = 0; i <= 10; i++) {
                if (i % 2 == 0) {
                    System.out.printf("线程%s输出:%s%n", name, i);
                }
            }
        });
        Thread t2 = new Thread(() -> {
            String name = Thread.currentThread().getName();
            for (int i = 0; i <= 10; i++) {
                if (i % 2 != 0) {
                    System.out.printf("线程%s输出:%s%n", name, i);
                }
            }
        });

        // 本行代码的执行结果是什么？ main线程休眠10秒
        // sleep()方法是静态方法，其执行结果不会因为调用它的对象而改变
        // 无论是使用线程对象还是使用Thread类调用，
        // 其结果都是让执行该行代码的线程进入到休眠状态
        t.sleep(10000);

        // 线程对象直接调用run()方法，不会开启多线程，只是简单的函数调用，
        // 依然是在main线程栈中将方法入栈，然后执行该方法，那么就会继续按照顺序流程的逻辑执行
        /*t2.run();
        t.run();*/

        // 使用线程对象调用start()方法，那么就会在JVM中开启对应线程新的虚拟线程栈，
        // 然后将线程对象对应的run()方法放入到各自的线程栈中，然后各自的线程栈会自动执行
        // 各自栈中的run()方法，并且互不干扰
        t.start();
        t2.start();
        // 在main方法中能否知道t和t2线程的任务是否执行完毕？
        // 如果是Runnable接口直接派发的任务是不能的
    }
}
